package org.s166.ums.dao.impl;

import org.s166.ums.dao.UserDao;
import org.s166.ums.entity.User;
import org.s166.ums.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

public class UserDaoImpl implements UserDao {
    public int add(User user) {
        int r = 0 ;

        // 第一：定义要操作数据库的SQL语句
        // ctrl + shift + u
        String sql = "INSERT INTO tbl_user (name,pass,sex,age) VALUES (?,?,?,?)" ;

        // 第二：获取连接对象
        Connection conn = DBUtil.getConnection() ;
        PreparedStatement pstmt = null ;

        // 第三：预编译SQL语句并返回语句对象
        try {
            pstmt = conn.prepareStatement(sql) ;
            // 第四：填充参数（占位符）
            // 语句对象.setXxx(占位符下标索引,数据) ;
            // 其中，Xxx指是字段对应的数据类型
            pstmt.setString(1,user.getName()) ;
            pstmt.setString(2,user.getPass()) ;
            pstmt.setString(3,user.getSex()) ;
            pstmt.setInt(4,user.getAge()) ;

            // 第五：执行SQL语句
            // 整数 变量 = 语句对象.executeUpdate() ; // 执行增、删、改操作，返回受影响的行数
            // ResultSet rst = 语句对象.executeQuery() ; // 执行查询操作，返回查询数据的结果，我们需要对此结果进行封装(List)
            r = pstmt.executeUpdate() ;

            // 第六：处理结果
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 第七：关闭相关对象
            DBUtil.close(null,pstmt,conn);
        }
        return r;
    }

    public User queryByLogin(String name, String pass) {

        System.out.println("============>here");
        // 创建Student对象，用于存储根据学号查询的学生信息
        User user = null ;

        // 第一：定义要操作数据库的SQL语句
        String sql = "SELECT id,name,pass,sex,age,reg_time FROM tbl_user WHERE name=? AND pass=?" ;

        // 第二：获取连接对象
        Connection conn = DBUtil.getConnection() ;
        PreparedStatement pstmt = null ;
        ResultSet rst = null ;


        try {
            // 第三：预编译SQL语句并返回语句对象
            pstmt = conn.prepareStatement(sql) ;

            // 第四：填充参数（占位符）
            pstmt.setString(1,name);
            pstmt.setString(2,pass);

            // 第五：执行SQL语句
            rst = pstmt.executeQuery() ;

            // 第六：处理结果 -- 遍历结果集中的数据，封装到List集合中
            // 结果集对象.next() ： 循环遍历各行，直到返回false结束
            // 结果集对象.getXxx(下标索引 | 字段名称) : 获取各列的数据

            //1.判断是否有数据
            if(rst.next()) {

                //2.获取当前行中，各列的数据
                int id = rst.getInt(1) ;
                String sex = rst.getString(4) ;
                int age = rst.getInt(5) ;
                Date regTime = rst.getTimestamp(6);

                //3.创建实体对象，并封装数据
                user = new User() ;

                user.setId(id);
                user.setName(name);
                user.setSex(sex);
                user.setAge(age);
                user.setRegTime(regTime);

            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 第七：关闭相关对象
            DBUtil.close(rst,pstmt,conn);
        }

        return user;
    }
}
